From: Jonas Dreßler Date: Thu, 24 Jul 2025 23:30:29 +0000 (+0200) Subject: smartcardManager: Properly disconnect signal connections from tokens X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~119^2~4^2^2~4 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=81c4a52cceeb5b2d0a68f64a68585b055a450691;p=gnome-shell.git smartcardManager: Properly disconnect signal connections from tokens The `token.disconnectAll()` call here is not going to work: The method is provided by gjs as convenience for native JS objects (added to an object using `Signals.addSignalMethods()`). The token here meanwhile is a GObject, which doesn't have a `disconnectAll()` method. To make it (hopefully) work as intended, use the convenience functions that we actually do add to GObjects, that is `connectObject()` and `disconnectObject()`. Part-of: (cherry picked from commit b3e5a524d382c227c2a75838791f315812c07265) --- diff --git a/js/misc/smartcardManager.js b/js/misc/smartcardManager.js index f5a438c89..b886110d9 100644 --- a/js/misc/smartcardManager.js +++ b/js/misc/smartcardManager.js @@ -72,7 +72,7 @@ class SmartcardManager extends Signals.EventEmitter { _addToken(token) { this._updateToken(token); - token.connect('g-properties-changed', (proxy, properties) => { + token.connectObject('g-properties-changed', (proxy, properties) => { const isInsertedChanged = !!properties.lookup_value('IsInserted', null); if (isInsertedChanged) { this._updateToken(token); @@ -82,7 +82,7 @@ class SmartcardManager extends Signals.EventEmitter { else this.emit('smartcard-removed', token); } - }); + }, this); // Emit a smartcard-inserted at startup if it's already plugged in if (token.IsInserted) @@ -100,7 +100,7 @@ class SmartcardManager extends Signals.EventEmitter { if (this._loginToken === token) this._loginToken = null; - token.disconnectAll(); + token.disconnectObject(this); } hasInsertedTokens() {